public class MyCircularQueue {
    public int[] elem;
    public int front;
    public int rear;

    //初始化：数组
    public MyCircularQueue(int k){
        elem=new int[k];
    }
    //向循环队列中放入一个元素；
    public boolean offer(int val){
        if(isFull()){
            return false;
        }
        elem[rear]=val;
        rear=(rear+1)% elem.length;
        return true;
    }
    //判断队列是否满了；
    public boolean isFull(){
        return (rear+1)%elem.length==front;
        //通过浪费一个空间进行判断rear的一个位置是否front来判断队列是否已经满了；
        //好处：
        //方便区分队列为空和是否为满；
    }
    //判断队列是否为空；
    public boolean isEmpty(){
        return front==rear;
    }

    //删除队列中的元素；
    public boolean poll(){
        if(isEmpty()){
            return false;
        }
        front=(front+1)% elem.length;
        return true;
    }
    //获取队列顶部元素；
    public int top(){
        if(isEmpty()){
            return -1;
        }
        return elem[front];
    }
    //获取队尾元素；
    public int peek(){
        if(isEmpty()){
            return -1;
        }
        int index=(rear==0)? elem.length-1 :rear-1;
        return elem[index];
    }
}
